[MWAR-455] Allow force overwrite of read only resources in exploded war target directory - #27
[MWAR-455] Allow force overwrite of read only resources in exploded war target directory#27laoseth wants to merge 2 commits into
Conversation
… readonly, similar to ant's force option for file operations
* MWAR-455: Add option to allow forcing resources to be overwritten when they are readonly, similar to ant's force option for file operations
|
Thanks for the PR! Will look at it and run the CI... |
| * If resources should be overwritten, even if they are read only | ||
| */ | ||
| @Parameter( defaultValue = "false" ) | ||
| boolean forceOverwriteResources; |
There was a problem hiding this comment.
we usually add @since for new parameter and make the field private.
There was a problem hiding this comment.
I can get that added to the pull request. However, based on @michael-o 's response, is that a vain exercise?
There was a problem hiding this comment.
Looking at the JIRA issue and the reason for this I am not convinced. It looks like a fix for a symptom with an ill-designed SCM. You should rather inquire with Perforce's today owner why it is implmented this way. I don't understand, therefore I won't consent this PR even if the code looks decent.
What about this? https://stackoverflow.com/questions/48195633/prevent-perforce-from-marking-files-as-read-only
|
Resolve #536 |
1 similar comment
|
Resolve #536 |
|
Perforce is a major SCM. IMHO it's superior to git. I think we need to support it instead of just claiming it's wrong by design. |
There was a problem hiding this comment.
Pull request overview
Note
Copilot couldn't run its full agentic review because it didn't start before the timeout. Make sure your repository has a runner available, or add a copilot-code-review.yml file specifying one with the runs-on attribute. See the docs for more details.
Adds support for forcibly overwriting read-only resources when building an exploded WAR, and validates the behavior with a new unit test.
Changes:
- Introduces a
forceOverwriteResourcesMojo parameter and propagates it through the packaging context. - Updates file-copy logic to make read-only destination files writable before overwriting.
- Adds a test covering a read-only destination resource scenario for exploded WAR builds.
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 5 comments.
| File | Description |
|---|---|
| src/test/java/org/apache/maven/plugins/war/WarExplodedMojoTest.java | Adds a new test to exercise overwriting a read-only resource in the exploded WAR directory. |
| src/main/java/org/apache/maven/plugins/war/packaging/WarPackagingContext.java | Extends the packaging context API to expose the force-overwrite flag. |
| src/main/java/org/apache/maven/plugins/war/packaging/AbstractWarPackagingTask.java | Updates copy logic to flip destination files to writable when force-overwrite is enabled. |
| src/main/java/org/apache/maven/plugins/war/AbstractWarMojo.java | Adds the new configuration parameter and wires it into the packaging context implementation. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| String getOutputTimestamp(); | ||
|
|
||
| /** | ||
| * If files are modified, but the target is readonly, force update. | ||
| * @return forceOverwriteResources | ||
| */ | ||
| boolean isForceOverwriteResources(); |
| if ( context.isForceOverwriteResources() && destination.exists() && !destination.canWrite() ) | ||
| { | ||
| destination.setWritable( true ); | ||
| } | ||
| FileUtils.copyFile( source.getCanonicalFile(), destination ); | ||
| // preserve timestamp |
| /** | ||
| * If resources should be overwritten, even if they are read only | ||
| */ | ||
| @Parameter( defaultValue = "false" ) | ||
| boolean forceOverwriteResources; |
| createFile( conflictingFile ); | ||
| conflictingFile.setWritable(false); | ||
| conflictingFile.setLastModified(System.currentTimeMillis()-100_000); | ||
|
|
||
| assertTrue( "sampeResource not found", sampleResource.exists() ); |
| conflictingFile.setWritable(false); | ||
| conflictingFile.setLastModified(System.currentTimeMillis()-100_000); | ||
|
|
||
| assertTrue( "sampeResource not found", sampleResource.exists() ); |
Following this checklist to help us incorporate your
contribution quickly and easily:
for the change (usually before you start working on it). Trivial changes like typos do not
require a JIRA issue. Your pull request should address just this issue, without
pulling in other changes.
[MWAR-XXX] - Fixes bug in ApproximateQuantiles,where you replace
MWAR-XXXwith the appropriate JIRA issue. Best practiceis to use the JIRA issue title in the pull request title and in the first line of the
commit message.
mvn clean verifyto make sure basic checks pass. A more thorough check willbe performed on your pull request automatically.
mvn -Prun-its clean verify).If your pull request is about ~20 lines of code you don't need to sign an
Individual Contributor License Agreement if you are unsure
please ask on the developers list.
To make clear that you license your contribution under
the Apache License Version 2.0, January 2004
you have to acknowledge this by using the following check-box.
[ X] I hereby declare this contribution to be licenced under the Apache License Version 2.0, January 2004
[X ] In any other case, please file an Apache Individual Contributor License Agreement.